package cn.csc.module.product.service.stock;

import cn.csc.framework.common.pojo.PageResult;
import cn.csc.module.product.controller.admin.stock.vo.SkuStockCreateReqVO;
import cn.csc.module.product.controller.admin.stock.vo.SkuStockExportReqVO;
import cn.csc.module.product.controller.admin.stock.vo.SkuStockPageReqVO;
import cn.csc.module.product.controller.admin.stock.vo.SkuStockUpdateReqVO;
import cn.csc.module.product.dal.dataobject.stock.SkuStockDO;

import javax.validation.Valid;
import java.math.BigInteger;
import java.util.Collection;
import java.util.List;

/**
 * 库存信息 Service 接口
 *
 * @author liuchuang
 */
public interface SkuStockService {

    /**
     * 创建库存信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    BigInteger createSkuStock(@Valid SkuStockCreateReqVO createReqVO);

    /**
     * 更新库存信息
     *
     * @param updateReqVO 更新信息
     */
    void updateSkuStock(@Valid SkuStockUpdateReqVO updateReqVO);


    /**
     * 删除库存信息
     *
     * @param id 编号
     */
    void deleteSkuStock(BigInteger id);

    /**
     * 获得库存信息
     *
     * @param id 编号
     * @return 库存信息
     */
    SkuStockDO getSkuStock(BigInteger id);

    /**
     * 获得库存信息
     *
     * @param skuId
     * @return 库存信息
     */
    SkuStockDO selectBySkuId(BigInteger skuId);

    /**
     * 获得库存信息列表
     *
     * @param ids 编号
     * @return 库存信息列表
     */
    List<SkuStockDO> getSkuStockList(Collection<BigInteger> ids);

    /**
     * 获得库存信息分页
     *
     * @param pageReqVO 分页查询
     * @return 库存信息分页
     */
    PageResult<SkuStockDO> getSkuStockPage(SkuStockPageReqVO pageReqVO);

    /**
     * 获得库存信息列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 库存信息列表
     */
    List<SkuStockDO> getSkuStockList(SkuStockExportReqVO exportReqVO);

}
